package AccesoADatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import Logica.Entidades.EquipoDeFantasia;
import Logica.Entidades.Participante;

public class EquipoFantasiaDAO {

	public void guardarEquipo(EquipoDeFantasia equipo,Participante p){
		
		
		SimpleDateFormat formateador = new SimpleDateFormat ("dd/MM/yyyy"); 
		String fecha=formateador.format (new Date());
		
		SimpleDateFormat formateador2 = new SimpleDateFormat ("hh:mm"); 
		String hora=formateador2.format (new Date()); 
		
		String consulta = "INSERT INTO EQUIPO_FANTASIA VALUES('"+equipo.getNombre()+"',"+equipo.getPuntajeTotal()+",TO_DATE("+"'"+fecha+"','dd/mm/yyyy'),'"+hora+"',"+equipo.getPresupuestoUtilizado()+",'"+p.getTipoDocumento()+"',"+p.getNroDocumento()+")";
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static List<List<String>> obtener100Equipo(){
		
		List<List<String>> resultado = new ArrayList<List<String>>();
		
		try {

         Connection conn = ConexionOracle.getConexionOracle().getConnection();
                      
         String consulta = "SELECT * FROM (SELECT EF.NOMBRE, EF.PUNTAJE_TOTAL, US.APELLIDO, US.NOMBRE AS NOMBREUsuario, US.NRO_DOCUMENTO, US.TIPO_DOCUMENTO FROM GRANDT.EQUIPO_FANTASIA EF, GRANDT.USUARIO US WHERE EF.NRO_DOCUMENTO=US.NRO_DOCUMENTO AND EF.TIPO_DOCUMENTO=US.TIPO_DOCUMENTO ORDER BY PUNTAJE_TOTAL DESC ) WHERE ROWNUM <= 100";
            
         Statement stmt = conn.createStatement();
         ResultSet rset = stmt.executeQuery(consulta);
            
         resultado = resultSetToString(rset,7);
         										   
         stmt.close();
         
		}catch (SQLException ex) {
            Logger.getLogger(ConexionOracle.class.getName()).log(Level.SEVERE, null, ex);
		}
		return resultado;
}
	
	public static List<List<String>> obtenerYAgregarUsuario(String tipoDoc, String numDoc){
		
		List<List<String>> resultado = new ArrayList<List<String>>();
		
		try {
         Connection conn = ConexionOracle.getConexionOracle().getConnection();
            
         String consulta = "SELECT EF.NOMBRE, EF.PUNTAJE_TOTAL, US.APELLIDO, US.NOMBRE AS NOMBREUsuario, US.NRO_DOCUMENTO, US.TIPO_DOCUMENTO from GRANDT.EQUIPO_FANTASIA EF, GRANDT.USUARIO US WHERE US.TIPO_DOCUMENTO ='" + tipoDoc + "'" + "AND US.NRO_DOCUMENTO = " + numDoc + " AND EF.NRO_DOCUMENTO = "+ numDoc + " AND EF.TIPO_DOCUMENTO ='"+ tipoDoc + "'";
            
         Statement stmt = conn.createStatement();
         ResultSet rset = stmt.executeQuery(consulta);
            
         resultado = resultSetToString(rset,7);
         										   
         stmt.close();
         
		}catch (SQLException ex) {
            Logger.getLogger(ConexionOracle.class.getName()).log(Level.SEVERE, null, ex);
		}
		return resultado;
	}
	
	public List<List<String>> buscarEquipo(String nombreEquipo){
		List<List<String>> equipoDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			String consulta = "SELECT * FROM EQUIPO_FANTASIA WHERE NOMBRE = '" + nombreEquipo + "'";
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
    		equipoDto = resultSetToString(rset,8);
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return equipoDto;
	}
	
	public List<List<String>> buscarEquipo(Participante p){
		List<List<String>> equipoDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			String consulta = "SELECT * FROM EQUIPO_FANTASIA WHERE TIPO_DOCUMENTO = '"+p.getTipoDocumento()+"' AND NRO_DOCUMENTO = "+p.getNroDocumento();
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
    		equipoDto = resultSetToString(rset,8);
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return equipoDto;
	}
	
	public static List<List<String>> resultSetToString(ResultSet r, int columnas) throws SQLException{
		
		List<List<String>> lista = new ArrayList<List<String>>();
		
		while(r.next()){
			
			List<String> temp = new ArrayList<String>();
			
			for(int i = 1 ; i < columnas ; i++){
				temp.add(r.getString(i));
			}
			lista.add(temp);
		}
		return lista;
	}

	public List<List<String>> obtenerEquiposDeFantasia(){
		
		List<List<String>> equiposDTO = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			String consulta = "SELECT * FROM equipo_fantasia";
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
			equiposDTO = resultSetToString(rset,7);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return equiposDTO;
	}

	public void guardarPuntajeTotal(String nombreEquipoFantasia, int puntaje) {
		
		String consulta = "UPDATE EQUIPO_FANTASIA SET PUNTAJE_TOTAL = "+ puntaje + " WHERE NOMBRE = '"+ nombreEquipoFantasia+"'";
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
            
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
